class Solution1 {
    // 中心扩展算法
    public static String longestPalindrome(String s) {
        // 处理边界条件
        if (s.length() == 1) {
            return s;
        }
        // 定义返回字串的起始位置和长度
        int bigin = 0, len = 0, n = s.length();
        for (int i = 0; i < n; i++) {
            // 利用双指针
            // 先扩展奇数长度的子串
            int left = i, right = i;
            // 不能越界
            while (left >= 0 && right < n && s.charAt(left) == s.charAt(right)) {
                left--;
                right++;
            }
            // 更新结果
            if (right - left - 1 > len) {
                bigin = left + 1;
                len = right - left - 1;
            }
            // 先扩展偶数长度的子串
            left = i; right = i + 1;
            while (left >= 0 && right < n && s.charAt(left) == s.charAt(right)) {
                left--;
                right++;
            }
            // 更新结果
            if (right - left - 1 > len) {
                bigin = left + 1;
                len = right - left - 1;
            }
        }
        return s.substring(bigin,bigin + len);
    }

    public static void main(String[] args) {
        String s = "cbbd";
        System.out.println(Solution1.longestPalindrome(s));
    }
}
